package com.copa.l27;

import java.util.Arrays;

/**
 * @author copa
 * @createDate 2022-05-05 17:22
 * @function 双指针法
 * 一开始我想到这种暴力破解法...但是通过不了...没考虑到后面重复数
 * 然后我就想到双指针法...但是我想的都已经超时了，最后看了网上的解法...才知道怎么回事
 * 具体解法看title.txt
 */
public class Test1 {


    // 这个超时了
//    public int removeElement(int[] nums, int val) {
//        if (nums == null || nums.length == 0) {
//            return 0;
//        }
//        int left = 0;
//        int right = nums.length - 1;
//        while (left < right) {
//            while (left < right && nums[left] != val) {
//                left++;
//            }
//            while (left < right && nums[right] == val) {
//                right--;
//            }
//            if (left == val) {
//                nums[left] = nums[right];
//                nums[right] = val;
//            }
//        }
//        return nums[left] != val ? left + 1 : left;
//    }

    public int removeElement(int[] nums, int val) {
        int left = 0;
        int right = nums.length;
        while (left < right) {
            if (nums[left] == val) {
                nums[left] = nums[right - 1];
                right--;
            } else {
                left++;
            }
        }
        return left;
    }

    public static void main(String[] args) {
        int[] nums = new int[]{0, 1, 2, 2, 3, 0, 4, 2};
        int temp = new Test1().removeElement(nums, 2);
        // System.out.println(temp);
        for (int i = 0; i < temp; i++) {
            System.out.print(nums[i] + "\t");
        }
    }
}
